<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>maPage</title>
<link rel="stylesheet" href="mesStyles.css"/>
<script type="module" src="monScript.js"></script>
</head>
<body>
<!-- Contenu de ma page -->
</body>
</html>
type module
: permet de scinder le script en plusieurs fichiers à l'aide d'imports/exports.
Le script est exécuté après analyse de la page.
Standard du W3C qui décrit une API indépendante du langage et de la plate-forme, permettant à des programmes d'accéder et de mettre à jour le contenu de documents HTML et XML.
Rappel : window
est l'objet global dans l'environnement du navigateur.
Définir une propriété de l'objet global revient à définir une variable globale.
typeof window; //"object"
window.toto = "tata";
toto; //"tata"
document
: référence du document contenu dans la fenêtreinnerHeight
: hauteur du contenu visible de la fenêtreinnerWidth
: largeur du contenu visible de la fenêtrelocation
: lit/définit l'URL courante de la fenêtreouterHeight
: hauteur de l'extérieur de la fenêtreouterWidth
: largeur de l'extérieur de la fenêtrescrollX
: défilement horizontal du documentscrollY
: défilement vertical du documentalert
: affiche une boîte de message d'alerteback
: recule d'une page dans l'historique de la fenêtreconfirm
: affiche une boîte de demande de confirmationprompt
: renvoie le texte saisi dans une boîte d'invitescroll
: fait défiler la fenêtre à un endroit particuliersetInterval
: exécute une fonction à intervalles régulierssetTimeout
: définit un délai avant d'exécuter une fonctionToute page web chargée dans un navigateur web a son propre objet document
.
Cet objet sert de point d'entrée au contenu de la page et apporte des fonctions générales au document.
<!doctype html>
<html>
<head>
<title>maPage</title>
</head>
<body>
<div id="maDiv" class="maClasse">
Allez donc voir le <a href="http://mpfc/">site de MPFC</a>
</div>
</body>
</html>
//accès à des nœuds existants
document.getElementById("maDiv"); //nœud par id
document.querySelector("div.maClasse"); //nœud par selecteur css
//création d'un nœud
let div = document.createElement("div");
//insertion de l'objet DOM dans le corps de la page
document.body.appendChild(div);
body
: renvoie le nœud BODY du documentcookie
: renvoie la liste des cookies ou définit un cookiehead
: renvoie le nœud HEAD du documentreferrer
: renvoie l'URI de la page qui a amené à cette pagetitle
: renvoie ou définit le titre du documentcreateElement
: crée un nouvel élément du type spécifiécreateTextNode
: crée un nœud de textegetElementById
: renvoie l'élément d'id donnéquerySelector
: renvoie le 1er élément correspondant au selecteur cssquerySelectorAll
: renvoie la liste des éléments correspondant au selecteur css<!doctype html>
<html>
<head>
<title>maPage</title>
</head>
<body>
<div id="maDiv" class="maClasse">
Allez donc voir le <a href="http://mpfc/">site de MPFC</a>
</div>
</body>
</html>
let div = document.getElementById("maDiv");
div.parentNode === document.body; //true
div.classList.remove("maClasse");
attributes
: tous les attributs associésclassName
: définit/obtient la classeclassList
: gestion avancée des classesid
: définit/obtient l'identifiantstyle
: objet représentant l'attribut styletagName
: nom de la balisetextContent
: définit/obtient le contenu textuelinnerHTML
: définit/obtient l'ensemble du balisage contenuouterHTML
: définit/obtient l'ensemble du balisage de l'élément et son contenufirstElementChild
: premier élément enfant directlastElementChild
: dernier élément enfant directparentNode
: nœud parentchildren
: tous les éléments enfantspreviousElementSibling
: élément précédant immédiatementnextElementSibling
: élément suivant immédiatementremove
: retire l'élément courant du DOMappendChild
: insère un nœud comme dernier enfantremoveChild
: retire un nœud enfantreplaceChild
: remplace un nœud enfant par un autreinsertBefore
: insère un nœud avant le nœud enfant spécifiéinsertAdjacentHTML
: parse en tant que HTML et insert les noeuds résultants à la position spécifiéecloneNode
: clone le nœudaddEventListener
: ajoute un écouteur d'événementsremoveEventListener
: retire un écouteur d'événementsquerySelector
: renvoie le 1er élément parmi les descendants correspondant au selecteur cssquerySelectorAll
: renvoie la liste des éléments parmi les descendants correspondant au selecteur cssmatches
: teste si l'élément correspond au selecteur cssgetBoundingClientRect
: renvoie les coordonnéesgetAttribute
: renvoie la valeur de l'attribut spécifiésetAttribute
: définit la valeur de l'attribut spécifiéremoveAttribute
: retire l'attribut spécifiéTrès vieille école ⇨ à bannir
<a href="#" onclick="alert('toto'); return false;">Cliquez ici</a>
Vieille école ⇨ à éviter
<a href="#" id="monLien">Cliquez ici</a>
let lien = document.getElementById("monLien");
lien.onclick = function() { alert('toto'); return false; };
Méthode actuelle
<a href="#" id="monLien">Cliquez ici</a>
let lien = document.getElementById("monLien");
lien.addEventListener("click", function(e) {
e.preventDefault();
alert('toto');
});
⇨ permet de gérer plusieurs écouteurs sur un même type d'événement.
C'est la nature de l'objet passé en argument de la fonction enregistrée.
let lien = document.getElementById("monLien");
lien.addEventListener("click", function(e) {
e instanceof Event; //true
e.type; //type d'événement sous forme de chaîne ("click" dans ce cas)
});
Ceci est un exemple.
function afficheCible(e) {
console.log( e.target.tagName ); //"div" ou "span"
}
let div = document.getElementById("maDiv");
div.addEventListener("click",afficheCible);
//les
Cherchez sur google.
function changeLien(e) {
e.preventDefault();
window.location = "http://duckduckgo.com";
}
let lien = document.getElementById("monLien");
lien.addEventListener("click",changeLien);
Dérivation de l'objet Event pour les événements de pointage (click, dblclick, contextmenu, mousedown, mouseup, mousemove, mouseover, mouseout, etc)
let lien = document.getElementById("monLien");
lien.addEventListener("click", function(e) {
e instanceof Event; //true
e instanceof MouseEvent; //true
e.clientX; //abcisse du pointeur dans la fenêtre (et non la page)
e.clientY; //ordonnée du pointeur dans la fenêtre (et non la page)
});
Dérivation de l'objet Event pour les événements liés au clavier (keydown, keypress, keyup)
window.addEventListener("keydown", function(e) {
e instanceof Event; //true
e instanceof KeyboardEvent; //true
e.key; //nom de la touche
});
Depuis la fin d'Internet Explorer, la généralisation des "evergreen browsers" (Firefox, Chrome, Safari, Edge, etc), et l'utilisation courante de frameworks (Angular, React), il est devenu rare d'avoir à s'en soucier.
var browser = navigator.userAgent.matches(/MSIE/) ? "IE" : "autre";
function addListener(elmt,type,fct) {
if (browser == "IE") elmt.attachEvent('on'+type,fct);
else elmt.addEventListener(type,fct,false);
}
var div = document.getElementById("maDiv");
addListener(div,"click",function() { alert("hello world"); });
userAgent
attachEvent
On teste l'existence des méthodes, de la plus standard à la moins répandue.
function addListener(elmt,type,fct) {
if (elmt.addEventListener) elmt.addEventListener(type,fct,false);
else if (elmt.attachEvent) elmt.attachEvent('on'+type,fct);
}
var div = document.getElementById("maDiv");
addListener(div,"click",function() { alert("hello world"); });
Aujourd'hui supplantée par des frameworks comme Angular ou React, jQuery est une bibliothèque javascript qui a dominé le monde du web pendant de nombreuses années et reste très présente.
jQuery
et son alias $
)let list = document.querySelectorAll(".classe");
for (let item of list) { list.remove(); }
// versus
$('.classe').detach();
$('a').css("color","red").show();